from typing import List, Dict, Optional, Tuple
import numpy as np

class DiffieHellman:
    def __init__(self) -> None: ...
    def get_public_key(self) -> bytes: ...
    def diffie_hellman(self, other_public_key: bytes) -> bytes: ...

class RandomMix:
    def __init__(self, seeds: Dict[int, bytes], rank: int) -> None: ...
    def mix_one(self, input: np.ndarray, weight: Optional[float] = None) -> Tuple[np.ndarray, np.ndarray]: ...
    def mix(self, inputs: List[np.ndarray], weight: Optional[float] = None) -> List[Tuple[np.ndarray, np.ndarray]]: ...
    def get_index(self, rank: int) -> int: ...

class MixAggregate:
    def __init__(self) -> None: ...
    def aggregate(self, inputs: List[Tuple[np.ndarray, np.ndarray]]) -> None: ...
    def finalize(self, weight: Optional[float] = None) -> List[np.ndarray]: ...
